CSV檔是以逗號分隔欄位的記錄格式,方便split。但遇到英文名字的公司行號甚至英文地址,逗號也是資料的一部份,倘若沒規則可循當然無解,但有規則就有機會被Regex破解。
規則是:逗號不論前後只要連接小數點或者空白,皆視為資料內容一部份,而非split分隔號。以下以Java對三組資料解析,取第二欄位的資料:
String[] sa = {
"A,B,C",
"A,SYSTEM.COM.,TW,C",
"A,No. 15, Sec. 2, Nanjing E. Rd., Zhongshan Dist., Taipei City, Taiwan (R.O.C.),C"
};
for (String s1 : sa) {
// String[] ssa = s1.split("(?<![ \\.]),");
// String[] ssa = s1.split("(?!,[ \\.]),");
// String[] ssa = s1.split(",(?=[^ \\.])");
String[] ssa = s1.split("(?<![ \\.]),(?=[^ \\.])");
System.out.println(ssa[1]);
}
得到結果如下:
B
SYSTEM.COM.,TW
No. 15, Sec. 2, Nanjing E. Rd., Zhongshan Dist., Taipei City, Taiwan (R.O.C.)
註解的部份是當時研究Pattern所留下,邦友可以玩玩看Regex的look around的威力。